const express = require("express");
const { PrismaClient } = require("@prisma/client");
const prisma = new PrismaClient();

const router = express.Router();
const jwt = require("jsonwebtoken");
const { jwtSecret } = require("../../../config");
// 示例路由：获取所有用户
router.get("/", async (req, res) => {
  const users = await prisma.user.findMany();
  res.json(users);
});

// 注册新用户
router.post("/register", async (req, res) => {
  console.log(
    "Received request to register a new user",
    JSON.stringify(req.body)
  );
  try {
    const { name, email, password } = req.body;

    // 验证请求数据
    if (!name || !email || !password) {
      return res.status(400).json({ error: "缺少必要字段" });
    }

    // 检查邮箱是否已存在
    const existingUser = await prisma.user.findUnique({
      where: { email },
    });
    if (existingUser) {
      return res.status(409).json({ error: "邮箱已存在" });
    }
    let userData = { name, email, password };
    // 创建新用户
    const newUser = await prisma.user.create({
      data: userData,
    });
    res.status(201).json({ ...newUser, message: "注册成功", code: 200 });
  } catch (error) {
    console.error("注册新用户时发生错误:", error);
    res.status(500).json({ error: "服务器内部错误" });
  }
});

// 用户登录
router.post("/login", async (req, res) => {
  try {
    const { email, password } = req.body;
    console.log("login_req.body", email, password);

    // 验证请求数据
    if (!email || !password) {
      return res.status(400).json({ error: "缺少必要字段" });
    }

    // 查找用户
    const user = await prisma.user.findUnique({
      where: { email },
    });

    if (!user || user.password !== password) {
      return res.status(401).json({ error: "邮箱或密码错误" });
    }

    // 生成 JWT 令牌
    const token = jwt.sign(
      { userId: user.id }, // 你可以根据需要添加更多的信息到 payload 中
      jwtSecret, // 使用环境变量存储密钥
      { expiresIn: "1h" } // 设置过期时间
    );

    res.json({ message: "登录成功", user, token });
  } catch (error) {
    console.error("用户登录时发生错误:", error);
    res.status(500).json({ error: "服务器内部错误" });
  }
});

// 删除用户
router.delete("/del/:id", async (req, res) => {
  try {
    const userId = parseInt(req.params.id);

    // 验证用户ID
    if (isNaN(userId)) {
      return res.status(400).json({ error: "无效的用户ID" });
    }

    // 删除用户
    const deletedUser = await prisma.user.delete({
      where: { id: userId },
    });

    res.json({ message: "用户删除成功", user: deletedUser });
  } catch (error) {
    console.error("删除用户时发生错误:", error);
    res.status(500).json({ error: "服务器内部错误" });
  }
});

// 修改用户信息
// 修改用户信息
router.put("/mod/:id", async (req, res) => {
  try {
    const userId = parseInt(req.params.id);
    const { name, email, password } = req.body;

    // 验证用户ID
    if (isNaN(userId)) {
      return res.status(400).json({ error: "无效的用户ID" });
    }

    // 如果提供了新的邮箱地址，则检查邮箱是否已存在
    if (email) {
      const existingUser = await prisma.user.findUnique({
        where: { email },
      });

      // 检查找到的用户是否不是当前正在更新的用户
      if (existingUser && existingUser.id !== userId) {
        return res.status(409).json({ error: "邮箱已存在" });
      }
    }

    // 更新用户信息
    const updatedUser = await prisma.user.update({
      where: { id: userId },
      data: {
        name,
        email,
        password,
      },
    });

    res.json({ message: "用户信息更新成功", user: updatedUser });
  } catch (error) {
    console.error("修改用户信息时发生错误:", error);
    res.status(500).json({ error: "服务器内部错误" });
  }
});

module.exports = router;
